package com.cheung.leetcode.normal;

public class LC12 {

    public static String intToRoman(int num) {
        StringBuilder sb = new StringBuilder();
        // 1<= num <=3999
        // 判断千位
        int i = num / 1000;
        if (i > 0) {
            sb.append("M".repeat(i));
        }
        num = num % 1000;
        // 判断百位
        int j = num / 100;
        if (j == 9) {
            sb.append("CM");
        } else if (j >= 5) {
            sb.append("D").append("C".repeat(j - 5));
        } else if (j == 4) {
            sb.append("CD");
        } else {
            sb.append("C".repeat(j));
        }

        num = num % 100;

        // 判断十位
        int k = num / 10;
        if (k == 9) {
            sb.append("XC");
        } else if (k >= 5) {
            sb.append("L").append("X".repeat(k - 5));
        } else if (k == 4) {
            sb.append("XL");
        } else {
            sb.append("X".repeat(k));
        }
        // 判断个位
        num = num % 10;
        if (num == 9) {
            sb.append("IX");
        } else if (num >= 5) {
            sb.append("V").append("I".repeat(num - 5));
        } else if (num == 4) {
            sb.append("IV");
        } else {
            sb.append("I".repeat(num));
        }


        return sb.toString();
    }


    public static String intToRomanV2(int num) {
        /**
         * 字符          数值
         * I             1
         * V             5
         * X             10
         * L             50
         * C             100
         * D             500
         * M             1000
         */
        StringBuilder sb = new StringBuilder();
        while (num >= 1000) {
            sb.append("M");
            num -= 1000;
        }
        if (num >= 900) {
            sb.append("CM");
            num -= 900;
        }
        if (num >= 500) {
            sb.append("D");
            num -= 500;
        }
        if (num >= 400) {
            sb.append("CD");
            num -= 400;
        }
        while (num >= 100) {
            sb.append("C");
            num -= 100;
        }
        if (num >= 90) {
            sb.append("XC");
            num -= 90;
        }
        if (num >= 50) {
            sb.append("L");
            num -= 50;
        }
        if (num >= 40) {
            sb.append("XL");
            num -= 40;
        }
        while (num >= 10) {
            sb.append("X");
            num -= 10;
        }
        if (num >= 9) {
            sb.append("IX");
            num -= 9;
        }
        if (num >= 5) {
            sb.append("V");
            num -= 5;
        }
        if (num >= 4) {
            sb.append("IV");
            num -= 4;
        }
        while (num >= 1) {
            sb.append("I");
            num -= 1;
        }


        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(intToRoman(1994));
        System.out.println(intToRomanV2(1994));

    }
}

